home *** CD-ROM | disk | FTP | other *** search
- /* uclock 1995 H.Ogasawara(COR.) */
-
- #include <corlib.h>
-
- #define REVERSE 1
- #define REDRAW 0
- #define FONT 12
-
- #if REDRAW
- # define ATTR (ColorGray|OptionXor)
- #else
- # define ATTR (ColorBlack)
- #endif
-
-
- typedef struct {
- int x, y;
- } T_BTBL;
- typedef struct {
- int x1, y1, x2, y2;
- } T_STBL;
- typedef struct {
- int x1, y1, x2, y2, x3, y3, x4, y4;
- } T_MTBL;
-
- static T_BTBL BaseTable[]= {
- { 0, -65536 },
- { 6850, -65176 },
- { 13625, -64103 },
- { 20251, -62328 },
- { 26655, -59870 },
- { 32767, -56755 },
- { 38521, -53019 },
- { 43852, -48702 },
- { 48702, -43852 },
- { 53019, -38521 },
- { 56755, -32768 },
- { 59870, -26655 },
- { 62328, -20251 },
- { 64103, -13625 },
- { 65176, -6850 },
- { 65536, 0 },
- { 65176, 6850 },
- { 64103, 13625 },
- { 62328, 20251 },
- { 59870, 26655 },
- { 56755, 32767 },
- { 53019, 38521 },
- { 48702, 43852 },
- { 43852, 48702 },
- { 38521, 53019 },
- { 32768, 56755 },
- { 26655, 59870 },
- { 20251, 62328 },
- { 13625, 64103 },
- { 6850, 65176 },
- { 0, 65536 },
- { -6850, 65176 },
- { -13625, 64103 },
- { -20251, 62328 },
- { -26655, 59870 },
- { -32767, 56755 },
- { -38521, 53019 },
- { -43852, 48702 },
- { -48702, 43852 },
- { -53019, 38521 },
- { -56755, 32768 },
- { -59870, 26655 },
- { -62328, 20251 },
- { -64103, 13625 },
- { -65176, 6850 },
- { -65536, 0 },
- { -65176, -6850 },
- { -64103, -13625 },
- { -62328, -20251 },
- { -59870, -26655 },
- { -56755, -32767 },
- { -53019, -38521 },
- { -48702, -43852 },
- { -43852, -48702 },
- { -38521, -53019 },
- { -32768, -56755 },
- { -26655, -59870 },
- { -20251, -62328 },
- { -13625, -64103 },
- { -6850, -65176 },
- { 0, -65536 },
- };
- static T_STBL Stable[61];
- static T_MTBL Mtable[61],
- Htable[13];
-
- static int Xc, Yc, Ho, Mo, So, Hn, Mn, Sn, FontX, FontY, T;
- static char timebuf[]= { 0,0,':',0,0,0 };
-
- static void
- MakeTable( h, v )
- {
- int i;
- Xc= h/2;
- Yc= v/2;
- for( i= 0 ; i< 61 ; i++ ){
- int hh, vv, xx, yy;
- Stable[i].x1= ((h*4*BaseTable[i].x/ 9)>>16)+Xc;
- Stable[i].y1= ((v*4*BaseTable[i].y/ 9)>>16)+Yc;
- Stable[i].x2= ((h*1*BaseTable[i].x/20)>>16)+Xc;
- Stable[i].y2= ((v*1*BaseTable[i].y/20)>>16)+Yc;
- Mtable[i].x1= ((h*2*BaseTable[i].x/ 5)>>16)+Xc;
- Mtable[i].y1= ((v*2*BaseTable[i].y/ 5)>>16)+Yc;
- hh= h*1*BaseTable[i].y/32;
- vv= v*1*BaseTable[i].x/32;
- xx= h*1*BaseTable[i].x/20;
- yy= v*1*BaseTable[i].y/20;
- Mtable[i].x2= ((xx+ hh)>>16)+Xc;
- Mtable[i].y2= ((yy- vv)>>16)+Yc;
- Mtable[i].x3= ((xx- hh)>>16)+Xc;
- Mtable[i].y3= ((yy+ vv)>>16)+Yc;
- }
- for( i= 0 ; i< 13 ; i++ ){
- int hh= h*1*BaseTable[i*5].y/48,
- vv= v*1*BaseTable[i*5].x/48,
- xx= h*2*BaseTable[i*5].x/ 8,
- yy= v*2*BaseTable[i*5].y/ 8;
- Htable[i].x1= ((xx+ hh)>>16)+Xc;
- Htable[i].y1= ((yy- vv)>>16)+Yc;
- Htable[i].x3= ((xx- hh)>>16)+Xc;
- Htable[i].y3= ((yy+ vv)>>16)+Yc;
- xx= h*1*BaseTable[i*5].x/20;
- yy= v*1*BaseTable[i*5].y/20;
- Htable[i].x2= ((xx+ hh)>>16)+Xc;
- Htable[i].y2= ((yy- vv)>>16)+Yc;
- Htable[i].x4= ((xx- hh)>>16)+Xc;
- Htable[i].y4= ((yy+ vv)>>16)+Yc;
- }
- FontX= Xc-(FONT*5/4);
- FontY= Yc+(FONT+FONT/2+h*1/20);
- }
-
- static void
- TimeSet()
- {
- T= TIMEBIN( TIMEGET() );
- Hn= (T >> 16) & 255;
- if( Hn >= 12 )
- Hn-= 12;
- Mn= (T >> 8) & 255;
- Sn= T & 255;
-
- /* nazo */
- #if REVERSE
- Hn= 12-Hn;
- Mn= 60-Mn;
- Sn= 60-Sn;
- #endif
- }
-
- static
- U_Draw( wp, up )
- WindowID wp;
- {
- int i= 0;
- DrawBuf dbuf[50], *dp= dbuf;
- #if REDRAW
- if( !up )
- #else
- # if REVERSE
- if( Sn == 60 || !up )
- # else
- if( !Sn || !up )
- # endif
- #endif
- {
- DrawSetClear( dp++, ColorGray ); i++;
- DrawSetCircle( dp++, Xc, Yc, Xc-2, Yc-2,
- ShadowDown, OptionShadow ); i++;
- DrawSetCircle( dp++, Xc, Yc, Xc>>4, Yc>>4,
- ShadowUp, OptionShadow ); i++;
- Ho= Mo= So= -1;
- {
- int h= (T>>16)&255,
- m= (T>>8)&255;
- timebuf[0]= h/10+'0';
- timebuf[1]= h%10+'0';
- timebuf[3]= m/10+'0';
- timebuf[4]= m%10+'0';
- DrawSetSymbol( dp++, FontX, FontY, timebuf,
- ColorGray|AttrReverse, FONT ); i++;
- }
- }
- if( Ho != Hn ){
- #if REDRAW
- if( Ho >= 0 ){
- DrawSetLine( dp++, Htable[Ho].x1, Htable[Ho].y1,
- Htable[Ho].x2, Htable[Ho].y2,
- ColorGray|OptionXor, OptionLine ); i++;
- DrawSetLine( dp++, Htable[Ho].x3, Htable[Ho].y3,
- Htable[Ho].x4, Htable[Ho].y4,
- ColorGray|OptionXor, OptionLine ); i++;
- DrawSetLine( dp++, Htable[Ho].x1, Htable[Ho].y1,
- Htable[Ho].x3, Htable[Ho].y3,
- ColorGray|OptionXor, OptionLine ); i++;
- }
- #endif
- DrawSetLine( dp++, Htable[Hn].x1, Htable[Hn].y1,
- Htable[Hn].x2, Htable[Hn].y2,
- ATTR, OptionLine ); i++;
- DrawSetLine( dp++, Htable[Hn].x3, Htable[Hn].y3,
- Htable[Hn].x4, Htable[Hn].y4,
- ATTR, OptionLine ); i++;
- DrawSetLine( dp++, Htable[Hn].x1, Htable[Hn].y1,
- Htable[Hn].x3, Htable[Hn].y3,
- ATTR, OptionLine ); i++;
- Ho= Hn;
- }
- if( Mo != Mn ){
- #if REDRAW
- if( Mo >= 0 ){
- DrawSetLine( dp++, Mtable[Mo].x1, Mtable[Mo].y1,
- Mtable[Mo].x2, Mtable[Mo].y2,
- ColorGray|OptionXor, OptionLine ); i++;
- DrawSetLine( dp++, Mtable[Mo].x1, Mtable[Mo].y1,
- Mtable[Mo].x3, Mtable[Mo].y3,
- ColorGray|OptionXor, OptionLine ); i++;
- }
- #endif
- DrawSetLine( dp++, Mtable[Mn].x1, Mtable[Mn].y1,
- Mtable[Mn].x2, Mtable[Mn].y2,
- ATTR, OptionLine ); i++;
- DrawSetLine( dp++, Mtable[Mn].x1, Mtable[Mn].y1,
- Mtable[Mn].x3, Mtable[Mn].y3,
- ATTR, OptionLine ); i++;
- Mo= Mn;
- }
- if( So != Sn ){
- if( So >= 0 ){
- DrawSetLine( dp++,
- Stable[So].x1, Stable[So].y1,
- Stable[So].x2, Stable[So].y2,
- ColorGray|OptionXor, OptionLine ); i++;
- }
- DrawSetLine( dp++,
- Stable[Sn].x1, Stable[Sn].y1,
- Stable[Sn].x2, Stable[Sn].y2,
- ColorGray|OptionXor, OptionLine ); i++;
- So= Sn;
- }
- WindowDraw( wp, dbuf, i );
-
- }
-
- static
- Exec( wp, info )
- WindowID wp;
- EventInfo *info;
- {
- static work;
- switch( info->option ){
- case EventInterval:
- if( IntervalWait( 100, &work ) ){
- TimeSet();
- U_Draw( wp, TRUE );
- return TRUE;
- }
- return FALSE;
- case EventRedraw:
- U_Draw( wp, FALSE );
- return TRUE;
- case EventOpen:
- TimeSet();
- WindowRedraw( wp );
- WindowSetEventAttr( wp, EventAttrDefault|EventIntervalON );
- return TRUE;
- case EventClose:
- WindowClose( wp );
- WindowConnectionClose();
- return TRUE;
- case EventResize:
- MakeTable( info->h, info->v );
- WindowResize( wp, info->x, info->y, info->h, info->v );
- return TRUE;
- }
- return FALSE;
- }
-
- WindowMain( argc, argv )
- char **argv;
- {
- int x= 0, y= 0, h= 100, v= 100;
- AnalyzeArgs( argc, argv, &x, &y, &h, &v );
- MakeTable( h, v );
- WindowTitleOpen( x, y, h, v, NULL, "uclock 1.1",
- Resize|Close|Push, Exec );
- }
-